//package com.controller;
//
//
//import com.alibaba.fastjson.JSONObject;
//import com.pojo.Msg;
//import com.pojo.User;
//import com.service.UserService;
//import com.utils.MD5Util;
//import com.utils.ShiroToken;
//import org.apache.shiro.SecurityUtils;
//import org.apache.shiro.authc.DisabledAccountException;
//import org.apache.shiro.subject.Subject;
//import org.apache.shiro.web.util.SavedRequest;
//import org.apache.shiro.web.util.WebUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Controller;
//import org.springframework.validation.BindingResult;
//import org.springframework.validation.FieldError;
//import org.springframework.web.bind.annotation.*;
//import org.springframework.web.servlet.ModelAndView;
//
//import javax.servlet.http.HttpServletRequest;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//import com.alibaba.fastjson.JSONObject;
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONArray;
//
//import com.utils.JwtUtils;
//
//@Controller
//public class UserController {
//    @Autowired
//    private UserService userService;
//
////
//    @Autowired
//    private JwtUtils jwtUtils;
//
//
//    @RequestMapping("/login")
//    public ModelAndView login() {
//        return new ModelAndView("login");
//    }
//
//    //注册跳转
//    @RequestMapping("/register")
//    public ModelAndView register() {
//        return new ModelAndView("register");
//    }
//
//    //    @Valid User user
//    @RequestMapping(value = "/register", method = RequestMethod.POST)
//    @ResponseBody
//    public Msg submitRegister(@RequestBody User user, BindingResult result) {
//        if (result.hasErrors()) {
//            //校验失败，应该返回失败，在模态框中显示校验失败的错误信息
//            Map<String, Object> map = new HashMap<>();
//            List<FieldError> errors = result.getFieldErrors();
//            for (FieldError fieldError : errors) {
//                map.put(fieldError.getField(), fieldError.getDefaultMessage());
//            }
//            return Msg.fail().add("errorFields", map);
//        }
//
//        String username = user.getUsername();
//        String password = user.getPassword();
//        User u = userService.findByName(username);
//        if (u != null) {
//            return Msg.fail().add("msg", "该用户已存在！");
//        }
//        user.setPassword(MD5Util.md5(password));
//        user.setRid(1);
//        userService.saveUser(user);
//        return Msg.success().add("msg", "注册成功！");
//    }
//
//    @RequestMapping(value = "/login", method = RequestMethod.POST)
//    @ResponseBody
//    public Msg submitLogin(@RequestParam String username, @RequestParam String password, Boolean isRemember, HttpServletRequest request) {
//        //Subject ：意义在于可以创建一个线程，以记录是哪一个用户发送出的请求
//        Subject currentUser = SecurityUtils.getSubject();
//
////        JSONObject jsonobj = new JSONObject();
////        jsonobj.put("username", "123");
////        System.out.println("JSONObject已经成功加载了");
////        System.out.println(request.getRemotePort());
////        System.out.println(request.getSession());
//
//        Msg result = null;
////        System.out.println("打印前台传过来的信息：");
////        System.out.println(username);
////        System.out.println(password);
//        if (!currentUser.isAuthenticated()) {
//            ShiroToken token = new ShiroToken(username, password);
//            if (isRemember != null)
//                token.setRememberMe(isRemember);
//            try {
//                currentUser.login(token);
//                SavedRequest savedRequest = WebUtils.getSavedRequest(request);
//                String url = null;
//                if (null != savedRequest) {
//                    url = savedRequest.getRequestUrl();
//                }
//                if (null == url || "".equals(url.trim())
//                        || "null".equals(url.trim())) {
////                    url = request.getContextPath() + "/index.html";
//                    url = "/index.html";
//                }
//                result = Msg.success();
//                result.add("back_url", url);
//
//                //以下是封装页面的token信息，用于缓存与sessionstorage中
//                //因为用户名不重复，所以可以用于生成token，不需要userid 也可以，所以这里对username进行封装
//                //需要封装成token的属性如下：username, request的主机地址，isRememberme
//
//
////                //使用阿里的JSONObject的类对页面token进行封装
//                JSONObject json = new JSONObject();
//                System.out.println("JSONObject已经成功加载了");
//                json.put("username",token.getUsername());
//                System.out.println(json);
//                json.put("username", token.getUsername());
//                json.put("isRememberMe", token.isRememberMe());
//                json.put("host", request.getRemoteHost());
//
////                在返回结果中添加token信息，并进行加密，形成页面token
//                result.add("token", jwtUtils.createJWT(json.toJSONString()));
//                result.add("username", token.getUsername());
//                result.add("isRememberMe", token.isRememberMe());
//
//
//
////                System.out.println(request.getAuthType());
////                System.out.println(request.getHeader());
//
//
//
//
//            } catch (DisabledAccountException e) {
//                return Msg.fail().add("msg", "帐号已经禁用！");
//            } catch (Exception e) {
//                return Msg.fail().add("msg", "帐号或密码错误！");
//            }
//        }
//        return result;
//    }
//
//    @RequestMapping(value = "/logout")
//    @ResponseBody
//    public Msg logout() {
//        try {
//            SecurityUtils.getSubject().logout();
//        } catch (Exception e) {
//            return Msg.fail().add("msg", "退出失败！");
//        }
//        System.out.println("退出登录");
//        return Msg.success();
//    }
//
//
//}